package edu.dew_summer2011;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import edu.dew_summer2011.dominio.Cliente;
import edu.dew_summer2011.dominio.Usuario;

public class UsuarioManager {
	Integer positioncarnombre=1;
	Map<String, Usuario> repositoryUs;

	public UsuarioManager() {
		this.repositoryUs = new HashMap <String, Usuario>();
//		Usuario usuario1 = new Usuario("rmejiap","abc","B",1, "rocio","mejia","paredes","Ventas","Cashier","6672987","Chiocjava@","Jose","Passport","09684273");
//		this.repositoryUs.put("rmejiap", usuario1);
	}
	
	public boolean anadircodigo(String nombre, String apellido1, String apellido2,String unidad, String posicion, String telefono,String email, String supervisor, String tipodoc, String documento)
	{				
		String usuario = "";		
		String primer = (nombre.substring(0, positioncarnombre)).toLowerCase();
		//mandatory fields
		if (nombre.isEmpty() && apellido1.isEmpty() && apellido2.isEmpty()){ 
			system_msg("Error: Mandatory fields incomplete " );			
			return false;
		}	
		//user with same name and last name
		if ((buscaUsuarioMismoNombre(nombre,apellido1,apellido2,tipodoc, documento))== false) {
			system_msg("Este usuario:nombre & apellido y/o doc ya existe"); return false;
		}
		
		
		int total = apellido1.length() + apellido2.length();
		if (total > 9){			
			usuario = ((apellido1 + apellido2).substring(0, 9)).toLowerCase();
			String newcodigo=primer + usuario;
			
			//verify this user is not already in the list						
			if (buscacodigoclienterepeat(newcodigo)== false) {
				positioncarnombre+=1;
				newcodigo=(nombre.substring(0, positioncarnombre)).toLowerCase()+ usuario;
				system_msg("cliente duplicado pero se recrea codigo : "+newcodigo);			
			}				
//			Usuario usuario1 = new Usuario(newcodigo,newcodigo,"B",0, nombre,apellido1,apellido2,unidad, posicion,telefono,email,supervisor,tipodoc,documento );						
//			this.repositoryUs.put(newcodigo, usuario1);
			
			system_msg("usuario agregado: "+newcodigo);
			return true;			
		}else
		{
			system_msg("El sistema no puede armar el codigo con menos de 10 caracteres "+primer+apellido1+apellido2);
			return false; 
		}
		
	}

	public void system_msg( String mensaje) {
		System.out.println(mensaje );
	}
	
	
	public boolean buscaUsuarioMismoNombre(String nombre,String apellido1,String apellido2, String tipodoc, String numdoc){
		
		Iterator<Usuario> usuarios = this.repositoryUs.values().iterator();
		while(usuarios.hasNext()) {
			Usuario usuario = usuarios.next(); 
		    if( (usuario.getNombre().equalsIgnoreCase(nombre) && 
		    	usuario.getApellido1().equalsIgnoreCase(apellido1) && 
		    	usuario.getApellido2().equalsIgnoreCase(apellido2)) ||
		       (usuario.getDocidentity().equalsIgnoreCase(numdoc) && usuario.getTipodoc().equalsIgnoreCase(tipodoc)) ) return false; 				
		}
	   return true;
	}
	
	public boolean buscacodigoclienterepeat(String usuarioEvaluar)
	{
		Iterator<Usuario> clientes = this.repositoryUs.values().iterator();
		while(clientes.hasNext()) {
			Cliente cliente = clientes.next(); 
		    if(cliente.getCodigo().equalsIgnoreCase(usuarioEvaluar)) return false;		    		      
		}
		return true;
		
	}
	
	public boolean vericarclave(String codigo, String clave)
	{
		Usuario existeusertemp = this.repositoryUs.get(codigo);
		if (existeusertemp == null){	
			System.out.println("Usuario no existe: " + codigo);
			return false;}
		String claveexistente= existeusertemp.getClave();
		if (claveexistente.equals(clave)== false) 
		{
			Integer numtryouts= sumarIntentos(existeusertemp);
//			if (numtryouts==3)  {
//				existeusertemp.setStatus("B");
//				System.out.println("intentos: "+existeusertemp.getIntentos()+" Status cambiado por limite de intentos: "+existeusertemp.getStatus());
//				}
				
			System.out.println("intentos: "+existeusertemp.getIntentos()); 
			
			return false;
		}
		
		return claveexistente.equals(clave);
	}
	
	public Integer sumarIntentos(Usuario usuario1)
	{
		
		usuario1.setIntentos(usuario1.getIntentos()+1);
		return usuario1.getIntentos();	
		
	}

	public String cambioclave(String usuario, String clave, int i) {
		// TODO Auto-generated method stub
		return null;
	}	
	
}
